﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using QuanLyRapChieuPhim.DTO;
using System.ComponentModel;

namespace QuanLyRapChieuPhim.DAO
{
    class NhanVienDAO
    {
        DataProvider dp = new DataProvider();

        public  BindingList<NhanVienDTO> GetList()
        {

            DataTable dt = new DataTable();
             BindingList<NhanVienDTO> ds = new  BindingList<NhanVienDTO>();
            if (dp.OpenConnect())
            {
                dt = dp.SqlExcuteQuery("uproc_GetList_NhanVien", null);
                dp.CloseConnect();
                foreach (DataRow row in dt.Rows)
                {
                    NhanVienDTO NhanVien = new NhanVienDTO();
                    NhanVien.MaNhanVien = int.Parse(row["maNhanVien"].ToString());
                    NhanVien.TenNhanVien = row["tenNhanVien"].ToString();
                    NhanVien.CMND = row["CMND"].ToString();
                    NhanVien.NgaySinh = DateTime.Parse(row["ngaySinh"].ToString());
                    NhanVien.GioiTinh = (row["gioiTinh"].ToString() == "True")?"Nam":"Nữ";
                    NhanVien.DiaChi = row["diaChi"].ToString();
                    NhanVien.DienThoai = row["dienThoai"].ToString();
                    NhanVien.MaChucVu = int.Parse(row["maChucVu"].ToString());
                    ds.Add(NhanVien);
                }
                return ds;
            }
            return null;
        }

        public BindingList<NhanVienDTO> GetList_QL()
        {

            DataTable dt = new DataTable();
            BindingList<NhanVienDTO> ds = new BindingList<NhanVienDTO>();
            if (dp.OpenConnect())
            {
                dt = dp.SqlExcuteQuery("uproc_GetList_NhanVien_QL", null);
                dp.CloseConnect();
                foreach (DataRow row in dt.Rows)
                {
                    NhanVienDTO NhanVien = new NhanVienDTO();
                    NhanVien.MaNhanVien = int.Parse(row["maNhanVien"].ToString());
                    NhanVien.TenNhanVien = row["tenNhanVien"].ToString();
                    NhanVien.CMND = row["CMND"].ToString();
                    NhanVien.NgaySinh = DateTime.Parse(row["ngaySinh"].ToString());
                    NhanVien.GioiTinh = (row["gioiTinh"].ToString() == "True")?"Nam":"Nữ";
                    NhanVien.DiaChi = row["diaChi"].ToString();
                    NhanVien.DienThoai = row["dienThoai"].ToString();
                    NhanVien.MaChucVu = int.Parse(row["maChucVu"].ToString());
                    NhanVien.TenChucVu = row["TenChucVu"].ToString();
                    NhanVien.DaXoa = int.Parse(row["DaXoa"].ToString());
                    ds.Add(NhanVien);
                }
                return ds;
            }
            return null;
        }
        
        public BindingList<NhanVienDTO> GetListExport()
        {

            DataTable dt = new DataTable();
            BindingList<NhanVienDTO> ds = new BindingList<NhanVienDTO>();
            if (dp.OpenConnect())
            {
                dt = dp.SqlExcuteQuery("uproc_GetListExport_NhanVien", null);
                dp.CloseConnect();
                foreach (DataRow row in dt.Rows)
                {
                    NhanVienDTO NhanVien = new NhanVienDTO();
                    NhanVien.MaNhanVien = int.Parse(row["maNhanVien"].ToString());
                    NhanVien.TenNhanVien = row["tenNhanVien"].ToString();
                    NhanVien.CMND = row["CMND"].ToString();
                    NhanVien.NgaySinh = DateTime.Parse(row["ngaySinh"].ToString());
                    NhanVien.GioiTinh = (row["gioiTinh"].ToString() == "True") ? "Nam" : "Nữ";
                    NhanVien.DiaChi = row["diaChi"].ToString();
                    NhanVien.DienThoai = row["dienThoai"].ToString();
                    NhanVien.TenChucVu = row["TenChucVu"].ToString();
                    NhanVien.DaXoa = int.Parse(row["DaXoa"].ToString());
                    ds.Add(NhanVien);
                }
                return ds;
            }
            return null;
        }

        public BindingList<NhanVienDTO> GetList_QL_DaXoa()
        {

            DataTable dt = new DataTable();
            BindingList<NhanVienDTO> ds = new BindingList<NhanVienDTO>();
            if (dp.OpenConnect())
            {
                dt = dp.SqlExcuteQuery("uproc_GetList_NhanVien_QL_DaXoa", null);
                dp.CloseConnect();
                foreach (DataRow row in dt.Rows)
                {
                    NhanVienDTO NhanVien = new NhanVienDTO();
                    NhanVien.MaNhanVien = int.Parse(row["maNhanVien"].ToString());
                    NhanVien.TenNhanVien = row["tenNhanVien"].ToString();
                    NhanVien.CMND = row["CMND"].ToString();
                    NhanVien.NgaySinh = DateTime.Parse(row["ngaySinh"].ToString());
                    NhanVien.GioiTinh = (row["gioiTinh"].ToString() == "True")?"Nam":"Nữ";
                    NhanVien.DiaChi = row["diaChi"].ToString();
                    NhanVien.DienThoai = row["dienThoai"].ToString();
                    NhanVien.MaChucVu = int.Parse(row["maChucVu"].ToString());
                    NhanVien.TenChucVu = row["TenChucVu"].ToString();
                    NhanVien.DaXoa = int.Parse(row["DaXoa"].ToString());
                    ds.Add(NhanVien);
                }
                return ds;
            }
            return null;
        }

        public BindingList<NhanVienDTO> GetListLikeName_QL(String _Ten)
        {

            DataTable dt = new DataTable();
            BindingList<NhanVienDTO> ds = new BindingList<NhanVienDTO>();
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = 
                { 
                    new SqlParameter("@Ten", _Ten) 
                };
                dt = dp.SqlExcuteQuery("uproc_GetListLikeName_NhanVien_QL", sqlParameter);
                foreach (DataRow row in dt.Rows)
                {
                    NhanVienDTO NhanVien = new NhanVienDTO();
                    NhanVien.MaNhanVien = int.Parse(row["maNhanVien"].ToString());
                    NhanVien.TenNhanVien = row["tenNhanVien"].ToString();
                    NhanVien.DiaChi = row["diaChi"].ToString();
                    NhanVien.DaXoa = int.Parse(row["DaXoa"].ToString());
                    ds.Add(NhanVien);
                }
                dp.CloseConnect();
                return ds;
            }
            return null;
        }

        public BindingList<NhanVienDTO> GetListLikeName_QL_DaXoa(String _Ten)
        {

            DataTable dt = new DataTable();
            BindingList<NhanVienDTO> ds = new BindingList<NhanVienDTO>();
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = 
                { 
                    new SqlParameter("@Ten", _Ten) 
                };
                dt = dp.SqlExcuteQuery("uproc_GetListLikeName_NhanVien_QL_DaXoa", sqlParameter);
                foreach (DataRow row in dt.Rows)
                {
                    NhanVienDTO NhanVien = new NhanVienDTO();
                    NhanVien.MaNhanVien = int.Parse(row["maNhanVien"].ToString());
                    NhanVien.TenNhanVien = row["tenNhanVien"].ToString();
                    NhanVien.DiaChi = row["diaChi"].ToString();
                    NhanVien.DaXoa = int.Parse(row["DaXoa"].ToString());
                    ds.Add(NhanVien);
                }
                dp.CloseConnect();
                return ds;
            }
            return null;
        }

        public NhanVienDTO GetFromId(int _Ma)
        {
            DataTable dt = new DataTable();
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = { new SqlParameter("@Ma", _Ma) };
                dt = dp.SqlExcuteQuery("uproc_GetFromID_NhanVien", sqlParameter);
                dp.CloseConnect();
                NhanVienDTO NhanVien = new NhanVienDTO();
                foreach (DataRow row in dt.Rows)
                {
                    NhanVien.MaNhanVien = int.Parse(row["maNhanVien"].ToString());
                    NhanVien.TenNhanVien = row["tenNhanVien"].ToString();
                    NhanVien.CMND = row["CMND"].ToString();
                    NhanVien.NgaySinh = DateTime.Parse(row["ngaySinh"].ToString());
                    NhanVien.GioiTinh = (row["gioiTinh"].ToString() == "True") ? "Nam" : "Nữ";
                    NhanVien.DiaChi = row["diaChi"].ToString();
                    NhanVien.DienThoai = row["dienThoai"].ToString();
                    NhanVien.MaChucVu = int.Parse(row["maChucVu"].ToString());
                }
                return NhanVien;
            }
            return null;
        }

        public int GetIDFromCMND(int _CMND)
        {
            DataTable dt = new DataTable();
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = { new SqlParameter("@CMND", _CMND) };
                dt = dp.SqlExcuteQuery("uproc_GetIDFromCMND_NhanVien", sqlParameter);
                dp.CloseConnect();
                NhanVienDTO NhanVien = new NhanVienDTO();
                foreach (DataRow row in dt.Rows)
                {
                    NhanVien.MaNhanVien = int.Parse(row["maNhanVien"].ToString());
                }
                if (dt.Rows.Count > 0)
                    return int.Parse(dt.Rows[0][0].ToString());
                return 0;
            }
            return -1;
        }

        public bool Delete(int _Ma)
        {
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = 
                { 
                    new SqlParameter("@Ma", _Ma) 
                };
                bool kq = dp.SqlExcuteNonQuery("uproc_Delete_NhanVien", sqlParameter);
                dp.CloseConnect();
                return kq;
            }
            return false;
        }

        public bool UnDelete(int _Ma)
        {
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = 
                { 
                    new SqlParameter("@Ma", _Ma) 
                };
                bool kq = dp.SqlExcuteNonQuery("uproc_UnDelete_NhanVien", sqlParameter);
                dp.CloseConnect();
                return kq;
            }
            return false;
        }

        public bool Add(NhanVienDTO _NV)
        {
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = 
                { 
                    new SqlParameter("@TenNhanVien", _NV.TenNhanVien), 
                    new SqlParameter("@CMND", _NV.CMND), 
                    new SqlParameter("@NgaySinh", _NV.NgaySinh),
                    new SqlParameter("@GioiTinh", (_NV.GioiTinh == "Nam")?1:0), 
                    new SqlParameter("@DiaChi", _NV.DiaChi), 
                    new SqlParameter("@DienThoai", _NV.DienThoai), 
                    new SqlParameter("@MaChucVu", _NV.MaChucVu)
                };
                bool kq = dp.SqlExcuteNonQuery("uproc_Add_NhanVien", sqlParameter);
                dp.CloseConnect();
                return kq;
            }
            return false;

        }

        public bool Add_Import(NhanVienDTO _NV)
        {
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = 
                { 
                    new SqlParameter("@TenNhanVien", _NV.TenNhanVien), 
                    new SqlParameter("@CMND", _NV.CMND), 
                    new SqlParameter("@NgaySinh", _NV.NgaySinh),
                    new SqlParameter("@GioiTinh", (_NV.GioiTinh == "Nam")?1:0), 
                    new SqlParameter("@DiaChi", _NV.DiaChi), 
                    new SqlParameter("@DienThoai", _NV.DienThoai), 
                    new SqlParameter("@MaChucVu", _NV.MaChucVu),
                    new SqlParameter("@DaXoa", _NV.DaXoa)
                };
                bool kq = dp.SqlExcuteNonQuery("uproc_Add_Import_NhanVien", sqlParameter);
                dp.CloseConnect();
                return kq;
            }
            return false;

        }

        public bool IsExists(NhanVienDTO _NV)
        {
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter = 
                { 
                    new SqlParameter("@TenNhanVien", _NV.TenNhanVien),
                    new SqlParameter("@CMND", _NV.CMND), 
                    new SqlParameter("@NgaySinh", _NV.NgaySinh), 
                    new SqlParameter("@GioiTinh", (_NV.GioiTinh == "Nam")?1:0), 
                    new SqlParameter("@DiaChi", _NV.DiaChi), 
                    new SqlParameter("@DienThoai", _NV.DienThoai),
                    new SqlParameter("@MaChucVu", _NV.MaChucVu)
                };
                DataTable dt = dp.SqlExcuteQuery("uproc_IsExists_NhanVien", sqlParameter);
                dp.CloseConnect();
                if (dt.Rows.Count > 0)
                    return true;
                return false;
            }
            return false;
        }

        public bool Update(NhanVienDTO _NV)
        {
            bool kq;
            if (dp.OpenConnect())
            {
                SqlParameter[] sqlParameter =
                { 
                    new SqlParameter("@MaNhanVien", _NV.MaNhanVien), 
                    new SqlParameter("@TenNhanVien", _NV.TenNhanVien), 
                    new SqlParameter("@CMND", _NV.CMND), 
                    new SqlParameter("@NgaySinh", _NV.NgaySinh),
                    new SqlParameter("@GioiTinh", (_NV.GioiTinh == "Nam")?1:0), 
                    new SqlParameter("@DiaChi", _NV.DiaChi), 
                    new SqlParameter("@DienThoai", _NV.DienThoai), 
                    new SqlParameter("@MaChucVu", _NV.MaChucVu)
                };
                kq = dp.SqlExcuteNonQuery("uproc_Update_NhanVien", sqlParameter);
                dp.CloseConnect();
                return kq;
            }
            return false;
        }
    }
}
